package ar.edu.utn.frsf.tpae.a2012.g05.dao.mock;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import ar.edu.utn.frsf.tpae.a2012.g05.dao.MovimientoDao;
import ar.edu.utn.frsf.tpae.a2012.g05.entity.Movimiento;
import ar.edu.utn.frsf.tpae.a2012.g05.exception.PersistenciaException;

@Repository
public class MovimientoDaoMock implements MovimientoDao {
	private List<Movimiento> movimientos = new ArrayList<Movimiento>();
	private static Integer nextId = 1;

	public Movimiento saveOrUpdate(Movimiento movimiento) {
		
		if (findById(movimiento.getId()) == null) {
			// si no existe le asigno un identificador
			movimiento.setId(nextId++);
		}
		else {
			// si ya existe lo elimino 
			this.movimientos.remove(movimiento);
		}
		this.movimientos.add(movimiento);
		return movimiento;
	}

	public void delete(Movimiento movimiento) throws PersistenciaException {
		if (!this.movimientos.remove(movimiento))
			throw new PersistenciaException("El movimiento que se intenta eliminar no existe");
	}

	public Movimiento findById(Integer idMovimiento) {
		for(Movimiento movimiento : this.movimientos) {
			if(movimiento.getId() == idMovimiento)
				return movimiento;
		}
		return null;
	}

	public List<Movimiento> findAll() {
		return this.movimientos;
	}

	@Override
	public List<Movimiento> findByIdCuenta(Integer idCuenta) {
		List<Movimiento> movimientos = new ArrayList<Movimiento>();
		for(Movimiento movimiento : this.movimientos) {
			if(movimiento.getCuenta().getId() == idCuenta)
				movimientos.add(movimiento);
		}
		return movimientos;
	}

}
